package com.ck.hxc.utils;

import org.junit.jupiter.api.Test;

import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class
AESUtil {

    private static final String ALGORITHM = "AES";
    private static final String TRANSFORMATION = "AES/ECB/PKCS5Padding";  // 使用 PKCS5 填充

    /**
     * AES 解密方法
     * @param encryptedText 加密后的 Base64 字符串
     * @param key           AES 密钥，必须为 16 字节
     * @return 解密后的明文
     */
    public String decrypt(String encryptedText, String key) {
        try {
            // 初始化密钥
            SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), ALGORITHM);

            // 设置解密模式
            Cipher cipher = Cipher.getInstance(TRANSFORMATION);
            cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);

            // Base64 解码
            byte[] decodedBytes = Base64.getDecoder().decode(encryptedText);

            // 解密
            byte[] originalBytes = cipher.doFinal(decodedBytes);

            // 返回解密后的明文
            return new String(originalBytes);
        } catch (Exception e) {
            throw new RuntimeException("解密失败！", e);
        }
    }

    @Test
    public void encrypt() {
        // 测试解密
        String encryptedPassword = "LNHrjK3B5wz4sRTWyqUAYw=="; // 前端加密后的密码
        String key = "1234567890123456";  // 密钥与前端一致

        try {
            String decryptedPassword = decrypt(encryptedPassword, key);
            System.out.println("解密后的密码：" + decryptedPassword);  // 应该输出 '123456'
        } catch (Exception e) {
            System.err.println("解密失败：" + e.getMessage());
            e.printStackTrace();
        }
    }

}
